﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.clinica.business.BE.actdocpago;
using com.clinica.business.BE.gesliq;
using com.clinica.business.BE.comun;
using LiclUtil;
using LiclActDocPago.Views;
using System.Text;
using com.clinica.business.BE.actcliente;

namespace wesiGestClinica.actdocpago
{
    public partial class FormsManDocumentoPago : Shared.SMGPaseBase, ILiclManDocumentoPago
    {
        private LiclManDocumentoPagoPresenter oPresenter = new LiclManDocumentoPagoPresenter();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                oPresenter.View = this;
                this.Master.TituloModulo = "Registrar Documento de Pago";
                CargarTipoDocumento();
                IniciarControles();
                CargarUrl();
                //EstablecerModos(0);
            }
            Master.OcultarMensaje();
            oPresenter.View = this;
        }
        protected override void DefineHandlers()
        {
            img_Buscar.Click += new ImageClickEventHandler(img_Buscar_Click);
            img_Buscar.Attributes.Add("onClick", "abrirPopupPaciente();");            
            img_BuscarCliente.Click += new ImageClickEventHandler(img_BuscarCliente_Click);
            img_BuscarCliente.Attributes.Add("onClick", "abrirPopupAgregarCliente();");
            btn_Consumos.Click += new EventHandler(btn_Consumos_Click);
            btn_Consumos.Attributes.Add("onClick", "abrirPopupAgregarConsumo();");
            UCBarra1.img_Grabar.Click += new ImageClickEventHandler(img_Grabar_Click);
            UCBarra1.img_Grabar.Attributes.Add("onClick", "if(!window.confirm(' Desea Guardar Documento de Pago'))return false;");
            UCBarra1.img_Volver.Click += new ImageClickEventHandler(img_Volver_Click);
            UCBarra1.img_Grabar.Visible = true;
            UCBarra1.img_Volver.Visible = true;

        }        
       
        #region Eventos
        protected void rbl_TipoDocumento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (rbl_TipoDocumento.SelectedValue == "1")//boleta
            {
                lbl_TotalBruto.Visible =
                txt_TotalBruto.Visible =
                lbl_Igv.Visible =
                txt_Igv.Visible = false;
                //txt_Igv.Text = "0";
                //txt_TotalBruto.Text = txt_TotalNeto.Text;
            }
                else{
                    lbl_TotalBruto.Visible =
                    txt_TotalBruto.Visible =
                    lbl_Igv.Visible = 
                    txt_Igv.Visible = true;
                } 
        }
        void img_Volver_Click(object sender, ImageClickEventArgs e)
        {
            if (Request.QueryString["action"].ToString().Trim() == "1")
                Response.Redirect("FormsConBandejaDocumentoPago.aspx?action=1");
            else 
                Response.Redirect("FormsConBandejaDocumentoPago.aspx?action=2");
        }


        void btn_Consumos_Click(object sender, EventArgs e)
        {
            DocumentoPagoBE oDoc = new DocumentoPagoBE();
            try
            {
                oDoc.NumeroLiq = int.Parse(txt_NumLiq.Text);
                oPresenter.onObtener_Liquidacion(oDoc);
            }
            catch (Exception)
            {
             
            }            
        }
        void img_Grabar_Click(object sender, ImageClickEventArgs e)
        {
            int Accion = 0;
            if (Request.QueryString["action"].ToString().Trim() == "2")
                Accion = 2;
            if (Request.QueryString["action"].ToString().Trim() == "1")
                Accion = 1;
            if (validarCampos())
            {
                GuardarTemporal();
                oPresenter.onGrabar_SolicitudDocPago(Accion, ListaDocumentoPago[0]);
            }
        }

        void img_BuscarCliente_Click(object sender, ImageClickEventArgs e)
        {
            ClienteBE oCli = new ClienteBE();
            try
            {
                oCli.CodCliente = int.Parse(txt_CodCliente.Text.Trim());
                oPresenter.onBuscar_Cliente_Detalle(oCli);
            }
            catch (Exception)
            {
            }
            
        }

        void img_Buscar_Click(object sender, ImageClickEventArgs e)
        {
            PacienteBE oPac = new PacienteBE();
            try
            {
                oPac.Codigo = int.Parse(txt_CodigoPaciente.Text.Trim());
                oPresenter.onBuscar_Paciente_Detalle(oPac);
            }
            catch (Exception)
            {
            }
            
        }
        #endregion
        #region Metodos
        private void GuardarTemporal()
        {
            DocumentoPagoBE oPlan = new DocumentoPagoBE();
            #region Cabecera
            oPlan.TipoDocumentoPago = int.Parse(rbl_TipoDocumento.SelectedValue);
            oPlan.Numero = int.Parse(txt_Numero.Text);
            oPlan.FechaEmision = (DateTime)UC_FechaEmision.value;
            oPlan.CodigoPaciente = int.Parse(txt_CodigoPaciente.Text);
            oPlan.Observacion = txt_Observaciones.Text.Trim();
            oPlan.ImporteBruto = decimal.Parse(txt_TotalBruto.Text);
            oPlan.ImporteNeto = decimal.Parse(txt_TotalNeto.Text);
            oPlan.Igv = decimal.Parse(txt_Igv.Text);
            oPlan.CodigoEstado = int.Parse(lbl_CodigoEstado.Text);
            oPlan.NumeroLiq = int.Parse(txt_NumLiq.Text.Trim());
            oPlan.CodCliente = int.Parse(txt_CodCliente.Text.Trim());

            //if (rbl_TipoDocumento.SelectedValue == "2")
            //{
            //    oPlan.CodigoEmpresa = int.Parse(txt_CodigoPaciente.Text);
            //}
            #endregion
            #region Detalle
            if (ListaDocumentoPago != null)
            {
                if (ListaDocumentoPago.Count > 0)
                {
                    foreach (DocumentoPagoBE item in ListaDocumentoPago)
                    {
                        item.TipoDocumentoPago = oPlan.TipoDocumentoPago;
                        item.Numero = oPlan.Numero;
                        item.FechaEmision = oPlan.FechaEmision;
                        item.Observacion = oPlan.Observacion;
                        item.NumeroLiq = oPlan.NumeroLiq;
                        item.CodCliente = oPlan.CodCliente;
                        item.CodigoPaciente = oPlan.CodigoPaciente;
                        item.CodigoEstado = oPlan.CodigoEstado;
                        item.ImporteBruto = oPlan.ImporteBruto;
                        item.ImporteNeto = oPlan.ImporteNeto;
                        item.Igv = oPlan.Igv;
                    }
                }
            }
            #endregion

        }
        private bool validarCampos()
        {
            bool booVal = true;
            StringBuilder strError = new StringBuilder();
            #region Cabecera
            if (rbl_TipoDocumento.SelectedValue == string.Empty)
            {
                booVal = false;
                strError.Append(" Debe seleccionar un tipo de doc. ");
            }
            if (txt_Numero.Text.Trim() == string.Empty)
            {
                txt_Numero.Text = "0";
            }
            if (lbl_CodigoEstado.Text.Trim() == string.Empty)
            {
                lbl_CodigoEstado.Text = "0";
            }
            if (rbl_TipoDocumento.SelectedValue == "2")
            {
                if (txt_Ruc.Text.Trim() == string.Empty || txt_Ruc.Text.Trim() == "0")
                {
                    booVal = false;
                    strError.Append(" No se ha Ingresado Un Cliente con RUC ");
                }
            }
           
            try
            {
                int.Parse(txt_Numero.Text);
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" se ha ingresado un carater incorrecto en el Número de solictud. ");
            }
            try
            {
                DateTime.Parse(UC_FechaEmision.Texto);
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" se ha ingresado una fecha incorrecta. ");
            }
            try
            {
                decimal.Parse(txt_TotalBruto.Text);                              
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" se ha ingresado un caracter incorrecta en Total Bruto. ");
            }
            try
            {
                decimal.Parse(txt_TotalNeto.Text);
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" se ha ingresado un caracter incorrecta en Total Neto. ");
            }
            try
            {
                decimal.Parse(txt_Igv.Text);
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" se ha ingresado un caracter incorrecta en Igv. ");
            }
            try
            {
                int.Parse(txt_NumLiq.Text.Trim());
            }
            catch (Exception)
            {
               booVal = false;
               strError.Append(" se ha detectado un problema con el código de Consumo. ");
            }
            try
            {
                if (rbl_TipoDocumento.SelectedValue == "2")
                {
                    int.Parse(txt_CodCliente.Text);
                    int.Parse(lbl_CodigoEstado.Text);
                }
            }
            catch (Exception)
            {
                booVal = false;
                strError.Append(" Error de inconcistencua en Código Plan Salud y Código estado. ");
            }
            #endregion
            #region Detalle
            if (ListaDocumentoPago != null)
            {
                if (dg_LiquidacionesDetalle.Rows.Count == 0 || ListaDocumentoPago.Count == 0)
                {
                    booVal = false;
                    strError.Append(" debe ingresar almenos una Liquidación. ");
                }
            }
            else
            {
                booVal = false;
                strError.Append(" debe ingresar almenos una Liquidación. ");
            }
            #endregion
            if (!booVal)
            {
                Master.MostrarMensaje(strError.ToString(), TipoMensaje.Error);
            }
            return booVal;
        }
        private void CargarTipoDocumento()
        {
            com.clinica.business.BE.comun.ParametrosBE oParm = new com.clinica.business.BE.comun.ParametrosBE();
            oParm.NombreTabla = "TIPDOCPAG";
            oPresenter.onObterner_Tabla(oParm);
        }
        private void IniciarControles()
        {
            DateTime fecha = new DateTime();
            fecha = DateTime.Today.ToUniversalTime();
            UC_FechaEmision.TextoFecha.Text = fecha.ToString("dd/MM/yyyy");
            txt_Estado.Text = string.Empty;
            txt_CiaSeguros.Text = string.Empty;
            txt_CodCliente.Text = "0";
            txt_Empresa.Text = string.Empty;
            txt_HistoriaClinica.Text = string.Empty;
            txt_Paciente.Text = string.Empty;
            txt_PlanSalud.Text = string.Empty;
            txt_Poliza.Text = string.Empty;
            txt_Titular.Text = string.Empty;
            txt_NumeroDoc.Text="0";
            txt_TotalNeto.Text = "0.00";
            txt_TotalBruto.Text = "0.00";
            txt_Igv.Text = "0.00";

            List<DocumentoPagoBE> lst = new List<DocumentoPagoBE>();
            lst.Add(new DocumentoPagoBE());
            dg_LiquidacionesDetalle.DataSource = lst;
            dg_LiquidacionesDetalle.DataBind();
            if (rbl_TipoDocumento.Items.Count > 0) rbl_TipoDocumento.Items[0].Selected = true;

            UCBarra1.img_Grabar.Visible = true;
            UCBarra1.img_Volver.Visible = true;

        }
        private void CargarUrl()
        {
            string action = string.Empty;
            string TipoLiq = string.Empty;
            string Num = string.Empty;
            try
            {
                action = Request.QueryString["action"].ToString().Trim();
                TipoLiq = Request.QueryString["TipoLiq"].ToString().Trim();
                Num = Request.QueryString["Num"].ToString().Trim();
            }
            catch (Exception)
            {


            }
            switch (action)
            {
                case "1":
                    Session.Add("Action", "new");
                    EstablecerModos(1);
                    lbl_TotalBruto.Visible =
                    txt_TotalBruto.Visible =
                    lbl_Igv.Visible =
                    txt_Igv.Visible = false;
                    break;
                case "2":
                    Session.Add("Action", "update");
                    lbl_TotalBruto.Visible =
                    txt_TotalBruto.Visible =
                    lbl_Igv.Visible =
                    txt_Igv.Visible = false;

                    DocumentoPagoBE oPla = new DocumentoPagoBE();
                    oPla.Numero = int.Parse(Num);
                    oPla.TipoDocumentoPago = int.Parse(TipoLiq);
                    oPresenter.onObtener_DocumentoSolicitud(oPla);
                    EstablecerModos(2);
                    break;
                default:
                    EstablecerModos(3);
                    break;
            }
        }
        private void EstablecerModos(int action)
        {
            switch (action)
            {
                case 1:
                    rbl_TipoDocumento.Enabled =
                    txt_Observaciones.Enabled =
                    img_Buscar.Enabled =
                    UCBarra1.img_Volver.Enabled =
                    UCBarra1.img_Grabar.Enabled = true;

                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    UC_FechaEmision.Enabled = false;
                    
                    break;
                case 2:
                    rbl_TipoDocumento.Enabled = false;
                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled = UC_FechaEmision.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    btn_Consumos.Enabled =
                    img_Buscar.Enabled = false;

                    UCBarra1.img_Volver.Enabled =
                    txt_Observaciones.Enabled =
                    UCBarra1.img_Grabar.Enabled = true;
                    break;
                default:
                    rbl_TipoDocumento.Enabled = false;
                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled = UC_FechaEmision.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    img_Buscar.Enabled =
                    txt_Observaciones.Enabled =
                    img_BuscarCliente.Enabled=
                    btn_Consumos.Enabled=
                    UCBarra1.img_Grabar.Enabled = img_Buscar.Enabled = false;
                    UCBarra1.img_Volver.Enabled = true;
                    break;
            }
        }      
        #endregion
        #region ILiclManDocumentoPago Members

        public void MostrarMensajeError(string Mensaje)
        {
            Master.MostrarMensaje(Mensaje.Trim(), TipoMensaje.Error);        
        }

        public void ObtenerTabla(List<com.clinica.business.BE.comun.ParametrosBE> lst)
        {
            rbl_TipoDocumento.DataSource = lst;
            rbl_TipoDocumento.DataValueField = "Codigo";
            rbl_TipoDocumento.DataTextField = "DescripcionCorta";
            rbl_TipoDocumento.DataBind();
        }

        public void ObtenerDocumentoPago(List<DocumentoPagoBE> lst)
        {
            if (lst.Count > 0)
            {
                dg_LiquidacionesDetalle.DataSource = lst;
                dg_LiquidacionesDetalle.DataBind();
                rbl_TipoDocumento.SelectedValue = lst[0].TipoDocumentoPago.ToString();
                rbl_TipoDocumento_SelectedIndexChanged(null, null);
                txt_Observaciones.Text = lst[0].Observacion;
                txt_TotalNeto.Text = lst[0].ImporteNeto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].ImporteNeto.ToString("#####.##");
                txt_TotalBruto.Text = lst[0].ImporteBruto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].ImporteBruto.ToString("#####.##");
                txt_Igv.Text = lst[0].Igv.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Igv.ToString("#####.##");

                txt_Estado.Text = lst[0].Estado;
                txt_NumLiq.Text = lst[0].NumeroLiq.ToString();
                txt_Numero.Text = lst[0].Numero.ToString(); 
                txt_CodCliente.Text = lst[0].CodCliente.ToString();
                txt_RazonSocial.Text = lst[0].RazonSocial;
                txt_Ruc.Text = lst[0].NumeroDocIdentidad;
                UC_FechaEmision.TextoFecha.Text = lst[0].FechaEmisionVista;
                ListaDocumentoPago = lst;
                //if (rbl_TipoDocumento.SelectedValue == "2")
                //{
                    //txt_Numero.Text = Request.QueryString["Num"].ToString().Trim();
                    //rbl_TipoDocumento.SelectedValue = lst[0].TipoDocumentoPago.ToString();
                //}
                PacienteBE oPac = new PacienteBE();
                oPac.Codigo = lst[0].CodigoPaciente;
                oPresenter.onBuscar_Paciente_Detalle(oPac);
            }
            else
            {
                txt_TotalNeto.Text = "0.00";
                txt_TotalBruto.Text = "0.00";
                txt_Igv.Text = "0.00";
                txt_Coaseguro.Text = "0.00";
                txt_Deducibles.Text = "0.00";
            }
        }

        public void MantenimientoDocumentoPago(int NunSol)
        {
            Session.Add("Action", "update");
            EstablecerModos(3);
            DocumentoPagoBE oTar = new DocumentoPagoBE();
            oTar.Numero = NunSol;
            oTar.TipoDocumentoPago = int.Parse(rbl_TipoDocumento.SelectedValue);
            oPresenter.onObtener_DocumentoSolicitud(oTar);
            txt_Numero.Text = NunSol.ToString();
            if (Request.QueryString["action"].ToString().Trim() == "1")
                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio", "Mostrarmensaje('Se registró la " + rbl_TipoDocumento.SelectedItem.Text + " Nro." + NunSol.ToString() + "');", true);
            else if (Request.QueryString["action"].ToString().Trim() == "2")
                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio", "Mostrarmensaje('Se Modificó la " + rbl_TipoDocumento.SelectedItem.Text + " Nro." + NunSol.ToString() + "');", true);
        }
        public void BuscarPacienteDetalle(List<PacienteBE> lst)
        {
            if (lst.Count > 0)
            {
                txt_CiaSeguros.Text = lst[0].Aseguradora.ToString();
                txt_Empresa.Text = lst[0].Empresa;
                txt_HistoriaClinica.Text = string.Empty;
                txt_PlanSalud.Text = lst[0].PlanSalud;
                txt_Poliza.Text = lst[0].CodigoPoliza.ToString();
                txt_CodigoPaciente.Text = lst[0].Codigo.ToString();
                txt_Paciente.Text = lst[0].NombreCompleto;
            }
        }
        public void BuscarClienteDetalle(List<ClienteBE> lst)
        {
            if (lst.Count > 0)
            {
                txt_CodCliente.Text = lst[0].CodCliente.ToString();
                txt_RazonSocial.Text = lst[0].RazonSocial;
                if (lst[0].TipoDocIdentidad.ToString() == "3") {
                    txt_Ruc.Text = lst[0].NumeroDocIdentidad;}else
                {
                    txt_Ruc.Text = "";
                }

            }
        }
        public void ObtenerLiquidacion(List<DocumentoPagoBE> lst)
        {
            dg_LiquidacionesDetalle.DataSource = lst;
            dg_LiquidacionesDetalle.DataBind();
            ListaDocumentoPago = lst;
            if (lst.Count > 0)
            {
                txt_TotalNeto.Text = lst[0].ImporteNeto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].ImporteNeto.ToString("#####.##");
                txt_TotalBruto.Text = lst[0].ImporteBruto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].ImporteBruto.ToString("#####.##");
                txt_Igv.Text = lst[0].Igv.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Igv.ToString("#####.##");                
            }
        }
        #endregion
        public List<DocumentoPagoBE> ListaDocumentoPago
        {
            get { return (List<DocumentoPagoBE>)Session["DocumentoPago"]; }
            set { Session["DocumentoPago"] = value; }
        }


    }
}
